import type {
  AxiosProgressEvent,
  AxiosRequestConfig,
  AxiosResponse,
  InternalAxiosRequestConfig
} from 'axios'

export interface RequestInterceptors<T = AxiosResponse> {
  // 请求拦截
  requestInterceptors?: (config: AxiosRequestConfig) => AxiosRequestConfig
  requestInterceptorsCatch?: (err: any) => any
  // 响应拦截
  responseInterceptors?: (config: AxiosResponse<T>) => AxiosResponse<T>
  responseInterceptorsCatch?: (err: any) => any
}
// 自定义传入的参数
export interface RequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  interceptors?: RequestInterceptors<T>
}

// 定义类型
export interface ProgressCallback {
  (progress: {
    percent: number // 上传百分比 0-100
    loaded: number // 已上传字节数
    total: number // 总字节数
    event: AxiosProgressEvent // 原始事件对象
  }): void
}

// 扩展请求配置类型
export interface CustomAxiosRequestConfig extends AxiosRequestConfig {
  // 可以添加其他自定义配置
  showLoading?: boolean // 是否显示加载状态
  showError?: boolean // 是否显示错误提示
  errorCallback?: (error: any) => void // 错误回调
  uploadProgressCallback?: ProgressCallback // 上传进度回调
}
